package cn.bby.tools.utils;

import com.intellij.openapi.project.Project;

import java.io.File;
import java.io.FileWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * 文件存储工具类，用于保存和读取HTTP请求历史记录
 */
public class FileStorageUtil {
    
    /**
     * 保存文本内容到文件
     * 
     * @param project 项目实例
     * @param relativePath 相对于.idea/FastDevTools目录的路径（以/HttpClient/开头）
     * @param content 文本内容
     */
    public static void saveToFile(Project project, String relativePath, String content) {
        try {
            // 获取项目根目录下的.idea/FastDevTools文件夹路径
            String projectBasePath = project.getBasePath();
            Path fastDevToolsDirPath = Paths.get(projectBasePath, ".idea", "FastDevTools");
            File fastDevToolsDir = fastDevToolsDirPath.toFile();
            
            // 如果目录不存在，则创建
            if (!fastDevToolsDir.exists()) {
                fastDevToolsDir.mkdirs();
            }
            
            // 构建完整文件路径
            Path filePath = Paths.get(fastDevToolsDirPath.toString(), relativePath.substring(1));
            File file = filePath.toFile();
            
            // 确保父目录存在
            File parentDir = file.getParentFile();
            if (!parentDir.exists()) {
                parentDir.mkdirs();
            }
            
            // 写入文件
            try (FileWriter writer = new FileWriter(file)) {
                writer.write(content);
            }
        } catch (Exception ex) {
            throw new RuntimeException("保存文件失败: " + ex.getMessage(), ex);
        }
    }
    
    /**
     * 从文件中读取文本内容
     * 
     * @param project 项目实例
     * @param relativePath 相对于.idea/FastDevTools目录的路径（以/HttpClient/开头）
     * @return 文件内容
     */
    public static String readFromFile(Project project, String relativePath) {
        try {
            // 获取项目根目录下的.idea/FastDevTools文件夹路径
            String projectBasePath = project.getBasePath();
            Path fastDevToolsDirPath = Paths.get(projectBasePath, ".idea", "FastDevTools");
            
            // 确保路径以/HttpClient/开头
            if (!relativePath.startsWith("/HttpClient/")) {
                throw new IllegalArgumentException("路径必须以/HttpClient/开头");
            }
            
            // 构建完整文件路径
            Path filePath = Paths.get(fastDevToolsDirPath.toString(), relativePath.substring(1));
            File file = filePath.toFile();
            
            // 检查文件是否存在
            if (!file.exists()) {
                return null;
            }
            
            // 读取文件内容
            return new String(Files.readAllBytes(filePath));
        } catch (Exception ex) {
            throw new RuntimeException("读取文件失败: " + ex.getMessage(), ex);
        }
    }
    
    /**
     * 检查文件是否存在
     * 
     * @param project 项目实例
     * @param relativePath 相对于.idea/FastDevTools目录的路径（以/HttpClient/开头）
     * @return 文件是否存在
     */
    public static boolean exists(Project project, String relativePath) {
        try {
            // 获取项目根目录下的.idea/FastDevTools文件夹路径
            String projectBasePath = project.getBasePath();
            Path fastDevToolsDirPath = Paths.get(projectBasePath, ".idea", "FastDevTools");
            
            // 确保路径以/HttpClient/开头
            if (!relativePath.startsWith("/HttpClient/")) {
                throw new IllegalArgumentException("路径必须以/HttpClient/开头");
            }
            
            // 构建完整文件路径
            Path filePath = Paths.get(fastDevToolsDirPath.toString(), relativePath.substring(1));
            File file = filePath.toFile();
            
            // 检查文件是否存在
            return file.exists();
        } catch (Exception ex) {
            throw new RuntimeException("检查文件失败: " + ex.getMessage(), ex);
        }
    }
}